package com.cz.convert;

import cn.hutool.core.img.ImgUtil;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import ru.yandex.qatools.ashot.AShot;
import ru.yandex.qatools.ashot.Screenshot;
import ru.yandex.qatools.ashot.shooting.ShootingStrategies;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;

public class HtmlToJPG {
    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "D:\\chromedriver-win64\\chromedriver.exe");

        // --------------------------
        // 步骤 1：初始化无头 Chrome 驱动
        // --------------------------
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--headless"); // 无头模式（不显示窗口）
        options.addArguments("--disable-gpu"); // 禁用 GPU 加速
        options.addArguments("--window-size=1920,1080"); // 设置浏览器窗口大小（影响图片分辨率）

        // 新增：允许跨域和加载不安全内容（测试用）
        options.addArguments("--disable-web-security");
        options.addArguments("--allow-running-insecure-content");
        // 若 chromedriver 未添加环境变量，需指定路径
        WebDriver driver = new ChromeDriver(options);

        try {
            String url="http://localhost:8080/ekp/kms/kem/kms_kem_main/kmsKemMainGen.do?method=getKemMainScreenShot&fdId=19a09a1306d2748690cbb2741a38110b";
            // 方式 2：直接加载 HTML 字符串（需通过 data URL）
            driver.get(url);

            // 创建 AShot 实例
            AShot ashot = new AShot();

// 设置截图策略：viewportPasting(100)
// 100 是毫秒数，表示每次滚动后的等待时间，有助于懒加载内容的加载
            Screenshot fpScreenshot = ashot
                    .shootingStrategy(ShootingStrategies.viewportPasting(100))
                    .takeScreenshot(driver);

            // --------------------------
            // 步骤 3：等待页面渲染完成（关键！避免图片不完整）
            // --------------------------
            // 显式等待核心元素加载（如页面标题）
            //Thread.sleep(10000); // 简单等待（或用 WebDriverWait 等待具体元素）

            // --------------------------
            // 步骤 4：截取页面图片并保存
            // --------------------------
         /*   WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));

            wait.until(webDriver ->
                    (Boolean) ((JavascriptExecutor) webDriver).executeScript("return document.readyState === 'complete';")
            );
            wait.until(webDriver -> {
                JavascriptExecutor js = (JavascriptExecutor) webDriver;
                WebElement img = driver.findElement(By.tagName("img"));
                return (Boolean) js.executeScript(
                        "return arguments[0].complete && arguments[0].naturalWidth > 0;", img
                );
            });

            System.out.println("图片加载完成，准备截图...");

            // 滚动到图片位置（避免截断）
            WebElement img = driver.findElement(By.tagName("img"));
            ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView();", img);*/

        /*    TakesScreenshot screenshot = (TakesScreenshot) driver;
            File screenshotFile = screenshot.getScreenshotAs(OutputType.FILE);

            // 保存图片到本地（如 output.png）
            FileHandler.copy(screenshotFile, new File("D:\\output.png"));
            System.out.println("图片已保存至：output.png");*/

            // 保存截图
            File srcFile = new File("d:\\chrome_full_screenshot.png");
            File cutFile = new File("d:\\chrome_full_screenshot.png");
            ImageIO.write(fpScreenshot.getImage(), "PNG", srcFile);


            BufferedImage originalImage = ImgUtil.read(srcFile);
            int originalWidth = originalImage.getWidth();
            int originalHeight = originalImage.getHeight();

            // 2. 定义你想从右边切掉多少像素
            int cutWidth = 200;
            // 3. 计算你想要保留的宽度
            int newWidth = originalWidth - cutWidth;
            // 4. 定义裁剪矩形 (x, y, width, height)
            // (0, 0) 开始，保留 newWidth 宽度 和 原始高度
            Rectangle rect = new Rectangle(0, 0, newWidth, originalHeight);

            // 5. 执行裁剪
            ImgUtil.cut(srcFile, cutFile, rect);

        } catch (Exception e) {
            System.err.println("生成图片失败：" + e.getMessage());
        } finally {
            driver.quit(); // 关闭浏览器
        }
    }
}
